There are situations where using storage devices in conventional ways is inefficient. For example, consider a situation where a query needs to be run on a database. The conventional solution is to load the database into the memory of the computer, perform the query on the in-memory copy of the database, and then process the results. While such an approach might be reasonable where the database is relatively small, loading a database that contains thousands, millions, or more records, where the result of the query is to identify a single record in the database, is very inefficient. Huge amount of data need to be moved into memory to perform the query, likely displacing other data already stored in the memory. And then the majority of that data is discarded once the query has been performed, since most of the data is not needed after the query completes. This problem may be magnified when queries need to be performed against the database repeatedly: each query might require the database be loaded anew into memory.
A need remains for a way to accelerate operations involving storage devices.